package com.xueyi.system.area.controller;

import cn.hutool.core.codec.Base64;
import com.alibaba.fastjson2.JSONObject;
import com.xueyi.system.area.domain.query.BaseAreaQuery;
import com.xueyi.system.area.domain.dto.BaseAreaDto;
import com.xueyi.system.area.service.IBaseAreaService;
import com.xueyi.common.web.entity.controller.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.xueyi.common.security.annotation.Logical;
import com.xueyi.common.security.annotation.RequiresPermissions;
import com.xueyi.common.core.web.validate.V_A;
import com.xueyi.common.core.web.validate.V_E;
import com.xueyi.common.core.web.result.AjaxResult;
import com.xueyi.common.log.annotation.Log;
import com.xueyi.common.log.enums.BusinessType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import sun.misc.BASE64Decoder;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 基地管理管理 业务处理
 *
 * @author yanhe
 */
@RestController
@RequestMapping("/area")
public class BaseAreaController extends BaseController<BaseAreaQuery, BaseAreaDto, IBaseAreaService> {

    @Autowired
    private IBaseAreaService baseAreaService;

    /** 定义节点名称 */
    @Override
    protected String getNodeName() {
        return "基地管理" ;
    }

    /**
     * 查询基地管理列表
     */
    @Override
    @GetMapping("/list")
    @RequiresPermissions(Auth.BASE_AREA_LIST)
    public AjaxResult list(BaseAreaQuery area) {
        //try {

           /* List<BaseAreaDto> areaDtoList = baseService.selectList(area);
            for (BaseAreaDto baseAreaDto : areaDtoList) {
                // BASE64解密
                BASE64Decoder decoder = new BASE64Decoder();
                byte[] bytes = decoder.decodeBuffer(baseAreaDto.getContent());
                baseAreaDto.setContent(new String(bytes));
            }
            return AjaxResult.success(areaDtoList);
        }catch (Exception e){
            return AjaxResult.error(e+"");
        }*/

        return super.list(area);
    }

    /**
     * 查询基地管理详细
     */
    @Override
    @GetMapping(value = "/{id}")
    @RequiresPermissions(Auth.BASE_AREA_SINGLE)
    public AjaxResult getInfoExtra(@PathVariable Serializable id) {
        return super.getInfoExtra(id);
    }

    /**
     * 基地管理导出
     */
    @Override
    @PostMapping("/export")
    @RequiresPermissions(Auth.BASE_AREA_EXPORT)
    @Log(title = "基地管理管理", businessType = BusinessType.EXPORT)
    public void export(HttpServletResponse response, BaseAreaQuery area) {
        super.export(response, area);
    }

    /**
     * 基地管理新增
     */
    @Override
    @PostMapping
    @RequiresPermissions(Auth.BASE_AREA_ADD)
    @Log(title = "基地管理管理", businessType = BusinessType.INSERT)
    public AjaxResult add(@Validated({V_A.class}) @RequestBody BaseAreaDto area) {
//        String str = new String(Base64.decode(area.getContent()));
//        area.setContent(str);
        return super.add(area);
    }

    /**
     * 基地管理修改
     */
    @Override
    @PutMapping
    @RequiresPermissions(Auth.BASE_AREA_EDIT)
    @Log(title = "基地管理管理", businessType = BusinessType.UPDATE)
    public AjaxResult edit(@Validated({V_E.class}) @RequestBody BaseAreaDto area) {
        return super.edit(area);
    }

    /**
     * 基地管理修改状态
     */
    @Override
    @PutMapping("/status")
    @RequiresPermissions(value = {Auth.BASE_AREA_EDIT, Auth.BASE_AREA_ES}, logical = Logical.OR)
    @Log(title = "基地管理管理", businessType = BusinessType.UPDATE_STATUS)
    public AjaxResult editStatus(@RequestBody BaseAreaDto area) {
        return super.editStatus(area);
    }

    /**
     * 基地管理批量删除
     */
    @Override
    @DeleteMapping("/batch/{idList}")
    @RequiresPermissions(Auth.BASE_AREA_DEL)
    @Log(title = "基地管理管理", businessType = BusinessType.DELETE)
    public AjaxResult batchRemove(@PathVariable List<Long> idList) {
        return super.batchRemove(idList);
    }

    /**
     * 获取基地管理选择框列表
     */
    @Override
    @GetMapping("/option")
    public AjaxResult option() {
        return super.option();
    }


    /**
     * 查询基地总面积
     */
    @GetMapping("/listArea")
    public AjaxResult listArea(BaseAreaQuery area) {
        List<BaseAreaDto> areaDtoList = baseAreaService.selectList(area);
        BigDecimal decimal = new BigDecimal(0);
        for (BaseAreaDto areaDto : areaDtoList) {
            decimal = decimal.add(areaDto.getArea());
        }
        return new AjaxResult(200,"1","SUCCESS",decimal);
    }

    //获取基地图片
    @GetMapping("/listImg")
    public AjaxResult listImg(BaseAreaQuery area) {
        area.setStatus("1");
        return super.list(area);
    }

    interface Auth {
        /** 系统 - 基地管理管理 - 列表 */
        String BASE_AREA_LIST = "system:area:list" ;
        /** 系统 - 基地管理管理 - 详情 */
        String BASE_AREA_SINGLE = "system:area:single" ;
        /** 系统 - 基地管理管理 - 新增 */
        String BASE_AREA_ADD = "system:area:add" ;
        /** 系统 - 基地管理管理 - 修改 */
        String BASE_AREA_EDIT = "system:area:edit" ;
        /** 系统 - 基地管理管理 - 修改状态 */
        String BASE_AREA_ES = "system:area:es" ;
        /** 系统 - 基地管理管理 - 删除 */
        String BASE_AREA_DEL = "system:area:delete" ;
        /** 系统 - 基地管理管理 - 导出 */
        String BASE_AREA_EXPORT = "system:area:export" ;
    }
}
